home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
fdimg
/
oh!.2hd
/
OH!DEN_B.LZH
/
TOOLS
/
CDC
/
ZCDCSRC.LZH
/
ZCDC.S
< prev
Wrap
Text File
|
1995-03-20
|
10KB
|
606 lines
*.include tnb.mac
DI macro
ori.w #$0700,sr
.endm
EI macro
andi.w #$F8FF,sr
.endm
SUPER macro
moveq #$81,d0
trap #15
.endm
USER macro
moveq #$81,d0
trap #15
.endm
.include iocscall.mac
.include doscall.mac
.include CDC_.MAC
StartStatio:*******************常駐部
SS:
jmp init-SS(a4)
head:
HEAD1 = 'ZCDB'
HEAD2 = 'GM01'
.dc.l HEAD1
.dc.l HEAD2
.even
st:
BITSNS:*=========================================
* ($104)[$0410]
* IOCS $04 BITSNS
*
BITSNS_ = $0410
BITSNS_JMP:
jmp $00000000.l
.dc.l 'ZmuS'
.dc.l 'iCcD'
TRP3: *---------------------------
* ($023)[$008C]
* TRAP #3
*
TRP3_ = $008C.w
tst.w TRP_TR
bne TRP3_JMP
move.l d1,D1IN
cmpi.l #$08,d1 *m_play
beq TRP3_MP_SUB
cmpi.l #$54,d1 *intercopt d2.l==0 なら演奏
beq TRP3_MP_SUB
cmpi.l #$0A,d1 *m_stop
beq TRP3_SUB
cmpi.l #$0B,d1 *m_cont
beq TRP3_SUB
cmpi.l #$11,d1 *play_cnv_data
beq TRP3_SUB
tst.l _FADEMODE
beq @f
cmpi.l #$1A,d1 *fade_out
beq TRP3_SUB
@@:
bra TRP3_JMP
TRP3_SUB:
movem.l d0-d7/a0-a6,-(sp)
bsr CDCTRAP
movem.l (sp)+,d0-d7/a0-a6
TRP3_JMP:
jmp $0.l
TRP3_MP_SUB:
movem.l d0-d7/a0-a6,-(sp)
move.w #1,TRP_TR
trap #3 *2重トラップでノーマルの処理実行!!
clr.w TRP_TR
move.l D1IN(pc),d1
bsr CDCTRAP
movem.l (sp)+,d0-d7/a0-a6
rte
TRP_TR: .dc.w 0 *0なら有効
D1IN: .dc.l 0 *d1記憶
OPMDRV:*-----------------------------
* ($1F0)[$07C0]
* IOCS $F0 OPMDRV
*
OPMDRV_ = $07C0.w
move.l d1,D1IN
cmpi.l #$08,d1 *m_play
beq OPM_MP_SUB
cmpi.l #$54,d1 *intercopt d2.l==0 なら演奏
beq OPM_MP_SUB
cmpi.l #$0A,d1 *m_stop
beq OPM_SUB
cmpi.l #$0B,d1 *m_cont
beq OPM_SUB
cmpi.l #$11,d1 *play_cnv_data
beq OPM_SUB
tst.l _FADEMODE
beq @f
cmpi.l #$1A,d1 *fade_out
beq OPM_SUB
@@:
bra OPMDRV_JMP
OPM_SUB:
movem.l d0-d7/a0-a6,-(sp)
bsr CDCTRAP
movem.l (sp)+,d0-d7/a0-a6
OPMDRV_JMP:
jmp 0.l
OPM_MP_SUB:
movem.l d0-d7/a0-a6,-(sp)
movea.l OPMDRV_JMP+2(pc),a6
jsr (a6)
move.l D1IN(pc),d1
bsr CDCTRAP
movem.l (sp)+,d0-d7/a0-a6
rts
CDCTRAP:*-----------------------------
CDC _CDC_SCSI_CHK
tst.l d0
beq @f *使用出来る
rts
@@:
cmpi.l #$08,d1 *m_play
beq M_PLAY
cmpi.l #$0A,d1 *m_stop
beq M_STOP
cmpi.l #$1A,d1 *fade_out
beq M_STOP
cmpi.l #$0B,d1 *m_cont
beq M_CONT
cmpi.l #$11,d1 *play_cnv_data
beq PLAYCD
tst.l d2
bne @f
cmpi.l #$54,d1 *intercopt d2.l==0 なら演奏
beq M_PLAY
@@: rts
M_STOP:
CDC _CDC_PAUSE
rts
M_CONT:
CDC _CDC_RESUME
rts
PLAYCD:
addq.l #1,a1 //VERSION NUMBER skip
bra PlaySub
M_PLAY:
moveq #$45,d1
trap #3
movea.l (a0),a1
*bra PlaySub
PlaySub:
move.l a1,-(sp)
bsr _ZComDisp
addq #4,sp
tst.l d0
bmi @f
beq PlaySS
rts
@@:
moveq #$4e,d1 *タイトルチェック
trap #3
move.l a0,-(sp)
bsr _ZTitDisp
addq #4,sp
tst.l d0
bmi @f
beq PlaySS
rts
PlaySS:
CDC _CDC_STOP
rts
.include ZCDC_.s
_C_BGM:
movem.l d3-d4,-(sp)
move.l 4+8(sp),d1
move.l 8+8(sp),d2
move.l 12+8(sp),d3
move.l 16+8(sp),d4
CDC _CDC_BGM
movem.l (sp)+,d3-d4
rts
_C_PLAY:
move.l 4(sp),d1
move.l 8(sp),d2
CDC _CDC_PLAY
rts
_C_TRACKS:
CDC _CDC_TRACKS
rts
SetLoopTime:*-----------------------------
* ZMUSIC $3b 用1
*
movem.l d0-d3/a0-a1,-(sp)
CDC _CDC_SCSI_CHK
tst.l d0
bne @f *使用出来ない
CDC _CDC_DRIVE
@@: moveq #$3b,d1 *再設定
moveq #1,d2
moveq #1,d3
lea SetLoopTime(pc),a1
trap #3
movem.l (sp)+,d0-d3/a0-a1
rts
*-------------------------------------
_FADEMODE:
.dc.l 0 *1;fade CD STOP
_CDC_LED_ST:
.dc.l 0 *常駐前のモード
_CDC_POWER_ST:
.dc.l 0 *常駐前のモード
ResultC:
.dc.l 0
EndStatio:*******************常駐部
MarkerChk:*----------------------------------------
* a0 アドレス
*
*[戻り値] bne ちがう
* beq あっている
cmpa.l #$00F00000,a0
bcc @f
cmp.l #HEAD1,(a0)
bne @f
cmp.l #HEAD2,4(a0)
bne @f
cmpa.l a0,a0 *z=1
@@:
rts
InvChk:*----------------------------------------
* a0.l==なら非常駐
* a0.l!=なら常駐
movea.l (a0),a0 *一つ前のポインタ
cmpa.l #$00F00000,a0
bcc IC1
cmp.l #HEAD1,$0104(a0)
bne @f
cmp.l #HEAD2,$0108(a0)
bne @f
adda.w #$100,a0 **[SS]のポインタ
rts
@@: **違う
tst.l (a0) *一つ前のポインタ
bne InvChk *0でない(上へ)
IC1: sub.l a0,a0 *非常駐
rts
AtoI:*----------------------------------------
* a2 アドレス
*[戻り値] d0.l 数字
moveq #0,d0
@@: move.b (a2)+,d2
subi.b #'0',d2
bcs AIr
cmpi.b #9,d2
bhi AIr
andi.l #$0000FF,d2
mulu #10,d0
add.l d2,d0
bra @b
AIr: subq #1,a2
rts
init:*------------------------------------------------------------------
lea usrsp,sp
** 常駐チェック **
suba.l a1,a1
SUPER
movea.l d0,a1
moveq #0,d1
bsr InvChk
movea.l a0,a3 *常駐先頭アドレス
movea.l BITSNS_,a0
suba #BITSNS-head,a0
bsr MarkerChk
bne @f
bset #0,d1
@@:
movea.l TRP3_,a0
suba #TRP3-head,a0
bsr MarkerChk
bne @f
bset #1,d1
@@:
movea.l OPMDRV_,a0
suba #OPMDRV-head,a0
bsr MarkerChk
bne @f
bset #2,d1
@@:
*d1に常駐状態
USER
** 常駐していたらそのデータを引用 **
move.l a3,d0
beq conl
move.l _CDC_LED_ST-SS(a3),_CDC_LED_ST
move.l _CDC_POWER_ST-SS(a3),_CDC_POWER_ST
move.l ResultC-SS(a3),ResultC
conl: ** コマンドラインチェック **
tst.b (a2)+ *スキップ
sw: move.b (a2)+,d0
beq keep
cmpi.b #' ',d0
beq sw
cmpi.b #$09,d0 *tab
beq sw
cmpi.b #'-',d0
beq swc
cmpi.b #'/',d0
beq swc
swe:
tst.w titsw *0;表示 1;非表示
bne @f
pea LR1(pc)
DOS _PRINT
addq.w #4,sp
@@: pea LR6(pc)
bra PE *end
swc: **スイッチ判断
move.b (a2)+,d0
beq swe
cmpi.b #'?',d0
beq help
ori.b #$20,d0 *小文字化!
cmpi.b #'t',d0
beq tswc
cmpi.b #'r',d0
beq free
cmpi.b #'h',d0
beq help
cmpi.b #'n',d0
beq nswc
swcerr: tst.w titsw *0;表示 1;非表示
bne @f
pea LR1(pc)
DOS _PRINT
addq.w #4,sp
@@: pea LR7(pc)
bra PE *end
nswc:*******************
move.w #1,titsw *0;表示 1;非表示
bra sw
help:******************
tst.w titsw *0;表示 1;非表示
bne @f
pea LR1(pc)
DOS _PRINT
addq.w #4,sp
@@: pea LRH(pc)
bra PE *end
CHK_T: .dc.w 0
tswc: ************************** 常駐させる
move.w #-1,CHK_T
keep: ************************** 常駐させる
tst.w titsw *0;表示 1;非表示
bne @f
pea LR1(pc)
DOS _PRINT
addq.w #4,sp
@@: move.l a3,d0
beq @f
*既に常駐、設定変更
*move.w Port(pc),Port-SS(a3)
*move.w MfMod(pc),MfMod-SS(a3)
pea LR5(pc)
bra PE *end
@@:
_CDC_CHK_
bne @f
pea LRNCD(pc)
bra PE *end
@@:
CDC _CDC_VERSION
cmpi.l #$0101,d0
bcc @f
pea LRNCD(pc)
bra PE *end
@@:
bsr _Zm_drvchk
tst.l d0
bne @f
pea LRNZM(pc)
bra PE *end
@@:
**セット
suba.l a1,a1
SUPER
movea.l d0,a1
move.l BITSNS_,BITSNS_JMP+2
lea BITSNS-SS(a4),a0
move.l a0,BITSNS_
move.l TRP3_,TRP3_JMP+2
lea TRP3-SS(a4),a0
move.l a0,TRP3_
move.l OPMDRV_,OPMDRV_JMP+2
lea OPMDRV-SS(a4),a0
move.l a0,OPMDRV_
USER
*Z func
moveq #$3b,d1
moveq #1,d2
moveq #1,d3
lea SetLoopTime(pc),a1
trap #3
moveq #$40,d1
lea ZCDC(pc),a1
trap #3
move.l d0,ResultC
moveq #0,d1
CDC _CDC_KEYMODE
moveq #1,d1
CDC _CDC_LED
move.l d0,_CDC_LED_ST
*moveq #0,d1
*CDC _CDC_POWER
*move.l d0,_CDC_POWER_ST
tst.w CHK_T
bne @f
moveq #1,d1
CDC _CDC_TRACKMODE
@@:
tst.w titsw *0;表示 1;非表示
bne @f
pea LRKP(pc)
DOS _PRINT
addq #4,sp
@@: clr.w -(sp)
move.l #EndStatio-StartStatio,-(sp)
DOS _KEEPPR
*ZCDC: .dc.b 'ZCDC -n -r',0
ZCDC: .dc.b 'ZCDC -r',0
.even
free: *****************************常駐解除
tst.w titsw *0;表示 1;非表示
bne @f
pea LR1(pc)
DOS _PRINT
addq.w #4,sp
@@: move.l a3,d0
bne @f
pea LR8(pc) **非常駐
bra PE *end
@@: cmpi.w #$07,d1
beq @f
pea LR4(pc) **ベクタが占領
bra PE *end
@@:
*Z func
moveq #$3b,d1
moveq #0,d2
moveq #1,d3
suba.l a1,a1
trap #3
suba.l a1,a1
SUPER
movea.l d0,a1
move.l (BITSNS_JMP-SS)+2(a3),BITSNS_
move.l (TRP3_JMP-SS)+2(a3),TRP3_
move.l (OPMDRV_JMP-SS)+2(a3),OPMDRV_
USER
move.l ResultC(pc),d2
bmi @f
moveq #$40,d1
suba.l a1,a1
trap #3
@@:
moveq #1,d1
CDC _CDC_KEYMODE
moveq #0,d1
CDC _CDC_MODE
move.l _CDC_LED_ST(pc),d1
CDC _CDC_LED
*move.l _CDC_POWER_ST(pc),d1
*CDC _CDC_POWER
moveq #0,d1
CDC _CDC_TRACKMODE
sub.l #$00000F0,a3
move.l a3,-(sp)
DOS _MFREE
addq #4,sp
pea LR3(pc)
PE: tst.w titsw *0;表示 1;非表示
bne @f
DOS _PRINT
@@: addq.w #4,sp
DOS _EXIT
*(trap #3のベクタのアドレス-8 から文字列 "ZmuSiC" があれば zmusic system常駐と判断)
* 戻り値:常駐してる ... 0以外
* 常駐してない ... 0
* DSHELL3 ソースより
.globl _Zm_drvchk
_Zm_drvchk:
lea.l $80+3*4,a1
IOCS _B_LPEEK
subq.l #8,d0
move.l #$ff000000,d1
and.l d0,d1
bne nn
movea.l d0,a1
lea buf,a2
movea.l a2,a0
moveq #5,d1
IOCS _B_MEMSTR
lea zmark,a1
moveq #5,d0 * loop回数( 'ZmuSiC' の長さ-1 )
@@: cmpm.b (a0)+,(a1)+
bne nn
dbra d0,@b
* moveq #1,d0
rts
nn: moveq #0,d0
rts
zmark: .dc.b 'ZmuSiC'
.even
buf: ds.b 8
titsw: .dc.w 0 *0;表示 1;非表示
LRKP: .dc.b ' 常駐しました。',$0d,$0a,0
.even
LR3: dc.b ' 常駐解除しました。',$0d,$0a,0
.even
LR4: dc.b ' ベクタが占領されています。',$0d,$0a,0
.even
LR5: .dc.b ' 既に常駐しています。',$0d,$0a,0
.even
LR6: .dc.b ' コマンドラインが異常です。',$0d,$0a,0
.even
LR7: .dc.b ' スイッチが異常です。',$0d,$0a,0
.even
LR8: .dc.b ' 常駐していません。',$0d,$0a,0
.even
LRNCD: .dc.b ' CDC.x が常駐していません。常駐出来ません。',$0d,$0a,0
.even
LRNZM: .dc.b ' ZMUSICが常駐していません。常駐出来ません。',$0d,$0a,0
.even
LRH:
.dc.b $0d,$0a
.dc.b '使用法:ZCDC.x [switch]',$0d,$0a
.dc.b ' 無し ・・ 常駐します。拡張トラックを解除します。',$0d,$0a
.dc.b ' /T ・・・・ 常駐します。拡張トラックを解除しません。',$0d,$0a
.dc.b ' /R ・・・・ 常駐解除します。',$0d,$0a
*.dc.b ' /N ・・・・ 表示を出しません。',$0d,$0a
.dc.b $0d,$0a,0
.even
LR1: dc.b 'ZMUSIC CD CONTROLER with CDC.x Version 0.20 Copyright 1994 TNB製作所',$0d,$0a,0
.even
.ds.b 2048
usrsp: